![Amazon Linux 2上のPostfixでローカルユーザにメール配送してみた](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-ec2.png)
Amazon Linux 2上のPostfixでローカルユーザにメール配送してみた
環境/前提
- Amazon Linux 2(ami-052652af12b58691f)
- セキュリティグループInboundでSMTP(25番ポート)を開けています
- 本文中に出てくる
example.jp
は独自ドメインに読み替えてください
Route53設定
Route 53 にてexample.jp
のHosted Zoneを作成します。AレコードのValueはSMTPサーバのEIP、MXレコードのValueは10 example.jp.
を設定しました。
Postfix設定
サービス確認
Amazon Linux 2ではMTAがSendmailからPostfixに変更されており、デフォルトでサービスが起動されています。
$ sudo service postfix status Redirecting to /bin/systemctl status postfix.service ● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled) Active: active (running) since 月 2020-03-16 09:04:14 UTC; 43min ago Process: 3105 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS) Process: 3101 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS) Process: 3097 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS) Main PID: 3195 (master) CGroup: /system.slice/postfix.service ├─3195 /usr/libexec/postfix/master -w ├─3196 pickup -l -t unix -u └─3197 qmgr -l -t unix -u 3月 16 09:04:13 ip-10-0-1-46 systemd[1]: Starting Postfix Mail Transport Agent... 3月 16 09:04:14 ip-10-0-1-46 postfix/postfix-script[3193]: starting the Postfix mail system 3月 16 09:04:14 ip-10-0-1-46 postfix/master[3195]: daemon started -- version 2.10.1, configuration /etc/postfix 3月 16 09:04:14 ip-10-0-1-46 systemd[1]: Started Postfix Mail Transport Agent. $ systemctl is-enabled postfix enabled $ sudo alternatives --display mta mta -ステータスは自動です。 リンクは現在 /usr/sbin/sendmail.postfix を指しています。 /usr/sbin/sendmail.postfix - 優先度 30 スレーブ mta-mailq: /usr/bin/mailq.postfix スレーブ mta-newaliases: /usr/bin/newaliases.postfix スレーブ mta-pam: /etc/pam.d/smtp.postfix スレーブ mta-rmail: /usr/bin/rmail.postfix スレーブ mta-sendmail: /usr/lib/sendmail.postfix スレーブ mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz スレーブ mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz スレーブ mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz スレーブ mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz 現在の「最適」バージョンは /usr/sbin/sendmail.postfix です。
SMTP認証に必要なパッケージをインストールし起動ました。
$ sudo yum install cyrus-sasl 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd (省略) 完了しました! $ sudo service saslauthd start Redirecting to /bin/systemctl start saslauthd.service $ sudo chkconfig saslauthd on 情報:'systemctl enable saslauthd.service'へ転送しています。 Created symlink from /etc/systemd/system/multi-user.target.wants/saslauthd.service to /usr/lib/systemd/system/saslauthd.service. $ systemctl is-enabled saslauthd enabled
設定ファイル編集
Postfixの設定ファイル/etc/postfix/main.cf
を更新します。設定項目は多数ありますが、ここでは変更した設定のみ記載しています。
myhostname
SMTPサーバーのホスト名をFQDNで指定します。
myhostname = test.example.jp
mydomain
SMTPサーバーのドメイン名を指定します。
mydomain = example.jp
myorigin
ローカルから配送されたメールの送信元アドレスに付加するドメイン名を指定します。$mydomain
に設定することでexample.jpのメールだと認識させます。
myorigin = $mydomain
inet_interfaces
SMTPサーバで待ち受けるネットワークアドレスを指定します。all
を指定することで外部のSMTPサーバとやり取りできるようになり、ローカル以外から配信されたメールも配信することが可能になります。
inet_interfaces = all
mydestination
このSMTPサーバーが受信(ローカルに配送)するドメインを指定します。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks
信頼できるネットワークを設定します。指定したネットワークに属しているクラインアントからは認証なしでメール送信が可能になりますので、不正中継に利用されないよう信頼できるネットワークのみ設定します。ここでは、VPC全体を信頼するネットワークとして指定しています。
mynetworks = 10.0.0.0/16, 127.0.0.0/8
home_mailbox
メールの保存形式を指定します。Maildir/
を指定することでMaildir形式となりメールごとにファイルが生成されます。メールは宛先ユーザのホームディレクトリ配下のMaildirディレクトリに保存されます。
home_mailbox = Maildir/
smtpd_banner
バナー情報(ソフトウェア名など)の出力を指定します。ここでは非表示にしています。
smtpd_banner = $myhostname ESMTP unknown
SMTPサーバ認証設定
mynetworks
指定したネットワーク以外からのメール送信に対してはメール認証をかけます。
ここでは認証にsaslauthdを利用していますが、必要に応じ/etc/sasl2/smtpd.conf
等を更新し認証方法を変更してください。
smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
設定を更新したら書式のチェックを行います。書式にエラーがなければ何も表示されずプロンプトが表示されます。
$ sudo postfix check $
現在の設定などpostconf
で確認することができますので、意図した設定になっているのか確認します。
$ postconf (省略)
設定反映
$ sudo service postfix restart Redirecting to /bin/systemctl restart postfix.service $ sudo service postfix status Redirecting to /bin/systemctl status postfix.service ● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled) Active: active (running) since 月 2020-03-23 08:53:23 UTC; 4s ago (省略)
ローカルユーザ作成
メールアドレスとして利用するためのユーザを作成します。この時点ではホームディレクトリ配下にファイルはありません。
$ sudo useradd test $ sudo passwd test $ sudo ls -lR /home/test/ /home/test/: 合計 0
動作確認
動作確認のためtest@example.com
にメールを送信します。
ローカルユーザへのメール配送が成功すると宛先ユーザのホームディレクトリ(ここでは/home/test
)配下にファイルが作成されます。
$ sudo ls -lR /home/test/ /home/test/: 合計 0 drwx------ 5 test test 39 3月 17 04:21 Maildir /home/test/Maildir: 合計 0 drwx------ 2 test test 6 3月 17 04:21 cur drwx------ 2 test test 89 3月 17 04:21 new drwx------ 2 test test 6 3月 17 04:21 tmp /home/test/Maildir/cur: 合計 0 /home/test/Maildir/new: 合計 4 -rw------- 1 test test 2297 3月 17 04:21 1584418910.Vca01I400085M853282.ip-10-0-1-16.ap-northeast-1.compute.internal /home/test/Maildir/tmp: 合計 0
メール配送の確認できない場合は、送信元にメールが戻ってきていないか、/var/log/maillog
を確認しましょう。
さいごに
今回は検証用で一時的に利用したかったため、上記のような設定としています。この環境だけではメールが届かなかったり、スパム扱いされる可能性が高いため、実際のシステムで利用する際は25ポートの解除申請や、SPFレコード等送信ドメイン認証等が必要になるかと思います。ドメイン認証等については以下記事に詳細がありますので、メールサーバを構築する際は一読いただければと思います。